package org.example;

import lombok.Data;

import java.lang.reflect.Method;
import java.util.concurrent.CompletableFuture;


//  封装方法调用信息 以便给漏桶匀速后台调用
@Data
public class MyMethodInvocation {
    // 获取 Method 对象
    private Method method;        // 存储方法对象
    // 获取目标对象
    private Object targetObject;  // 存储调用该方法的对象
    // 获取参数
    private Object[] parameters;  // 存储调用该方法的参数


    CompletableFuture<Object> future=new CompletableFuture<>();

    public MyMethodInvocation(Method method, Object targetObject, Object[] parameters) {
        this.method = method;
        this.targetObject = targetObject;
        this.parameters = parameters;
    }

    //获取返回值
    public Object getResult() throws Exception {
        return future.get();
    }


    // 便捷调用该方法
    public Object invoke() throws Exception {
        // 使用反射调用方法并返回结果
        return method.invoke(targetObject, parameters);
    }

    public void setResult(Object result) {
        future.complete(result);
    }
}
